MongoDB 4.0 এর পর থেকে, MongoDB ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন সমর্থন করে, যা মাল্টি-ডকুমেন্ট ট্রানজেকশনগুলোকে সমর্থন করে। এর মানে হল যে MongoDB একাধিক ডকুমেন্টে একযোগভাবে একাধিক অপারেশন করতে সক্ষম এবং সেই অপারেশনগুলো একে অপরের সাথে পারস্পরিক সম্পর্কযুক্ত থাকে, যেখানে ACID বৈশিষ্ট্যগুলির পূর্ণ প্রতিপালন নিশ্চিত করা হয়।
ACID ট্রানজেকশনের মূল বৈশিষ্ট্য
- Atomicity (পারমাণিকতা): ট্রানজেকশনের সমস্ত অপারেশন একসাথে সফল বা ব্যর্থ হবে। অর্থাৎ, যদি একটি অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন ফিরিয়ে নেয়া হবে (রোলব্যাক)।
- Consistency (সঙ্গতি): ট্রানজেকশন শুরুর আগে এবং শেষে ডেটাবেস একটি সঠিক অবস্থায় থাকবে। কোনো ট্রানজেকশনের ফলে ডেটাবেসের কাঠামো বা কনসিস্টেন্সি ক্ষতিগ্রস্ত হবে না।
- Isolation (অস্তিত্বশীলতা): একাধিক ট্রানজেকশন একসাথে চলতে পারে, তবে এক ট্রানজেকশনের ফলাফল অন্য ট্রানজেকশনগুলির জন্য দৃশ্যমান হবে না যতক্ষণ না ট্রানজেকশনটি সম্পূর্ণভাবে সম্পন্ন হয়।
- Durability (দৃঢ়তা): একবার ট্রানজেকশন সম্পন্ন হলে, তার পরিবর্তনগুলি স্থায়ী হবে এবং সিস্টেম ক্র্যাশ বা অন্য কোনো সমস্যা সত্ত্বেও হারাবে না।
MongoDB তে Multi-document ACID Transactions
MongoDB তে একাধিক ডকুমেন্টে একযোগে কার্যকরী ট্রানজেকশন চালানো সম্ভব, যা রিলেশনাল ডেটাবেসের মতো পারফেক্ট ACID ট্রানজেকশন সাপোর্ট করে। MongoDB তে ট্রানজেকশন শুরু, পরিচালনা, এবং শেষ করার জন্য কিছু নির্দিষ্ট প্রক্রিয়া রয়েছে।
Multi-document ট্রানজেকশন ব্যবহার করার প্রক্রিয়া
1. ট্রানজেকশন শুরু করা
MongoDB তে ট্রানজেকশন শুরু করার জন্য, প্রথমে একটি সেশন তৈরি করতে হবে। এরপর সেই সেশনটি ব্যবহার করে ট্রানজেকশন শুরু করা হয়।
const session = await client.startSession(); // সেশন শুরু করুন
session.startTransaction(); // ট্রানজেকশন শুরু করুন
2. ট্রানজেকশন চলাকালীন অপারেশনগুলো সম্পাদন করা
যখন ট্রানজেকশন চালু থাকে, তখন আপনি একাধিক ডকুমেন্ট বা কালেকশনে ডেটা পরিবর্তন করতে পারেন (ডকুমেন্ট ইনসার্ট, আপডেট, ডিলিট)।
const collection1 = db.collection("orders");
const collection2 = db.collection("inventory");
try {
await collection1.insertOne({ item: "apple", qty: 100 }, { session }); // ডকুমেন্ট ইনসার্ট
await collection2.updateOne({ item: "apple" }, { $inc: { stock: -100 } }, { session }); // ডকুমেন্ট আপডেট
await session.commitTransaction(); // ট্রানজেকশন সফলভাবে সম্পন্ন
} catch (error) {
await session.abortTransaction(); // যদি কোনো ত্রুটি ঘটে, ট্রানজেকশন বাতিল
throw error; // ত্রুটি ছুড়ে দিন
} finally {
session.endSession(); // সেশন শেষ করুন
}
3. ট্রানজেকশন রোলব্যাক করা
যদি ট্রানজেকশনের মধ্যে কোনো সমস্যা বা ত্রুটি ঘটে, তাহলে MongoDB সেই ট্রানজেকশনটি রোলব্যাক করবে, অর্থাৎ সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরে যাবে।
try {
// কিছু অপারেশন করুন
await session.commitTransaction(); // ট্রানজেকশন সফল হলে
} catch (error) {
await session.abortTransaction(); // যদি কোনো ত্রুটি ঘটে, ট্রানজেকশন রোলব্যাক করুন
}
4. ট্রানজেকশন কমিট করা
যদি সমস্ত অপারেশন সফলভাবে সম্পন্ন হয়, তবে ট্রানজেকশনকে কমিট করতে হবে, যা পরিবর্তনগুলো ডেটাবেসে স্থায়ী করে তোলে।
await session.commitTransaction(); // সমস্ত পরিবর্তন স্থায়ী করুন
5. ট্রানজেকশন বন্ধ করা
ট্রানজেকশন শেষে, সেশন বন্ধ করতে হয়।
session.endSession(); // সেশন বন্ধ করুন
MongoDB তে ট্রানজেকশন সমর্থন করার শর্ত
MongoDB তে multi-document ACID ট্রানজেকশন ব্যবহারের জন্য কিছু শর্ত পূর্ণ করতে হয়:
- MongoDB 4.0 বা তার পরবর্তী সংস্করণ প্রয়োজন।
- ট্রানজেকশনটি replica set (যেখানে ডেটা একাধিক সার্ভারে রেপ্লিকেটেড থাকে) তে করা হতে হবে।
- ট্রানজেকশনের জন্য একটি সেশন তৈরি করতে হবে এবং সেই সেশনটি ব্যবহার করে ট্রানজেকশন পরিচালনা করতে হবে।
ব্যবহারিক উদাহরণ
ধরা যাক, একটি সিস্টেমে বিক্রয় এবং ইনভেন্টরি আপডেট করার প্রক্রিয়া চলছে। একটি ট্রানজেকশনে আমরা দুটি কাজ করতে চাই:
- একটি অর্ডার ইনসার্ট করা।
- ইনভেন্টরি থেকে পণ্য এর পরিমাণ কমানো।
ট্রানজেকশন কোড উদাহরণ:
const session = await client.startSession();
try {
session.startTransaction();
const orderCollection = db.collection("orders");
const inventoryCollection = db.collection("inventory");
// অর্ডার ইনসার্ট করা
await orderCollection.insertOne({ item: "apple", quantity: 100 }, { session });
// ইনভেন্টরি আপডেট করা
await inventoryCollection.updateOne(
{ item: "apple" },
{ $inc: { stock: -100 } },
{ session }
);
// সবকিছু সফল হলে ট্রানজেকশন কমিট করা
await session.commitTransaction();
} catch (error) {
// যদি কোনো ত্রুটি ঘটে, ট্রানজেকশন রোলব্যাক করা
await session.abortTransaction();
throw error;
} finally {
// সেশন শেষ করা
session.endSession();
}
সারাংশ
MongoDB তে multi-document ACID ট্রানজেকশন ব্যবহার করে একাধিক ডকুমেন্টে একযোগে পরিবর্তন আনতে পারেন, যা একে অপরের ওপর নির্ভরশীল। MongoDB 4.0 এবং পরবর্তী সংস্করণগুলোতে ACID ট্রানজেকশন সমর্থিত, যা ডেটাবেসে একাধিক ডকুমেন্টের মধ্যে মান্যতা এবং স্থায়িত্ব বজায় রাখতে সাহায্য করে। Atomicity, Consistency, Isolation, এবং Durability সুনির্দিষ্টভাবে নিশ্চিত করা হয়, যা ডেটা সুরক্ষা এবং কনসিস্টেন্সি নিশ্চিত করে।
Read more